<?php
namespace Modules\Admin\Service;
use Modules\Admin\Entities\Module;

class ModuleService{
	public function updateCache(){
	    //添加新的模块数据之前将模块表中的所有模块数据删除
        //truncate()方法是阶段某个表中的数据
        //dd(143265);
        \DB::table('modules')->truncate();
		$modules = \HDModule::getModulesLists();

		//循环所有模块数据，将每个模块的数据添加到modules表中
//        dd($modules);
		foreach ($modules as $v){
			Module::create([
				'name' => $v['name'],
				'title' => $v['title'],
				'is_default' => 0,
				'home_access' => $this->is_home_access($v),
			]);

		}
		return $modules;
		//dd($modules);
	}
	//模块是否有前台访问的功能
    //规定 如果在对应的模块内，有一个叫做HomeController的类存在，并且这个类中有index的方法 我们就认为这个模块是前台可以访问的
	public function is_home_access($module){
	    //在方法内判断当前传入的模块$module是否有HomeController类和index方法
		//定义一个类变量
        $class = '\Modules\\' .$module['name'].'\\Http\\Controllers\\HomeController';
        //判断$class是否存在 并且判断$class里面的index方法是否存在
//        dd(class_exists($class));
		return class_exists ($class) && method_exists ($class,'index');
	}

    /**
     * 获取默认模块
     */
    public function getDefault(){
        //找到允许前台访问并且是默认模块的数据
        $module = Module::where([
            ['home_access',1],
            ['is_default',1]
        ])->first();
        //允许前台访问并且是默认模块的数据可能不存在,如果不存在,我们就找到某个指定的模块数据作为找不到设置默认模块数据的时候使用访问的模块
        $module = $module ? $module : Module::where('name','Shop')->first();

        return $module;
    }

}
?>